SUBROUTINE CronParseString &
!
(cronString, cron)
IMPLICIT NONE
!Arguments with intent (in):
CHARACTER (LEN = *), INTENT (IN) :: cronString
!Arguments with intent (out):
TYPE ( CronTab ), INTENT (OUT) :: cron
!local declarations:
CHARACTER (LEN = 100) :: string
CHARACTER (len=100), POINTER :: targs (:), args (:)
INTEGER (KIND = short) :: tnargs, nargs, i, j, k
INTEGER (KIND = short) :: minute, hour, dayOfMonth, month, dayOfWeek
!-------------------------end of declarations----------------------------------
!clean time string
string = StringCompact ( cronString )
!save cron string
cron % string = string
!split string
CALL StringTokenize (string = string, delims = ' ', &
args = targs, nargs = tnargs)
!search for minutes
cron % minutes = 0
IF ( targs (1) (1:1) == '*' ) THEN
cron % minutes = 1
ELSE IF ( INDEX (targs (1), ',' ) > 0 ) THEN
CALL StringTokenize (string = targs (1), delims = ',', &
args = args, nargs = nargs)
DO i = 1, nargs
minute = StringToLong (args (i) )
cron % minutes ( minute ) = 1
END DO
ELSE IF ( INDEX (targs (1), '-' ) > 0 ) THEN
CALL StringTokenize (string = targs (1), delims = '-', &
args = args, nargs = nargs)
j = StringToLong (args (1) )
k = StringToLong (args (2) )
DO i = j, k
cron % minutes ( i ) = 1
END DO
ELSE
minute = StringToLong ( targs (1) )
cron % minutes ( minute ) = 1
END IF
!search for hours
cron % hours = 0
IF ( targs (2) (1:1) == '*' ) THEN
cron % hours = 1
ELSE IF ( INDEX (targs (2), ',' ) > 0 ) THEN
CALL StringTokenize (string = targs (2), delims = ',', &
args = args, nargs = nargs)
DO i = 1, nargs
hour = StringToLong (args (i) )
cron % hours ( hour ) = 1
END DO
ELSE IF ( INDEX (targs (2), '-' ) > 0 ) THEN
CALL StringTokenize (string = targs (2), delims = '-', &
args = args, nargs = nargs)
j = StringToLong (args (1) )
k = StringToLong (args (2) )
DO i = j, k
cron % hours ( i ) = 1
END DO
ELSE
hour = StringToLong ( targs (2) )
cron % hours ( hour ) = 1
END IF
!search for days of month
cron % daysOfMonth = 0
IF ( targs (3) (1:1) == '*' ) THEN
cron % daysOfMonth = 1
ELSE IF ( INDEX (targs (3), ',' ) > 0 ) THEN
CALL StringTokenize (string = targs (3), delims = ',', &
args = args, nargs = nargs)
DO i = 1, nargs
dayOfMonth = StringToLong (args (i) )
cron % daysOfMonth ( dayOfMonth ) = 1
END DO
ELSE IF ( INDEX (targs (2), '-' ) > 0 ) THEN
CALL StringTokenize (string = targs (3), delims = '-', &
args = args, nargs = nargs)
j = StringToLong (args (1) )
k = StringToLong (args (2) )
DO i = j, k
cron % daysOfMonth ( i ) = 1
END DO
ELSE
dayOfMonth = StringToLong ( targs (3) )
cron % daysOfMonth ( dayOfMonth ) = 1
END IF
!search for months
cron % months = 0
IF ( targs (4) (1:1) == '*' ) THEN
cron % months = 1
ELSE IF ( INDEX (targs (4), ',' ) > 0 ) THEN
CALL StringTokenize (string = targs (4), delims = ',', &
args = args, nargs = nargs)
DO i = 1, nargs
month = StringToLong (args (i) )
cron % months ( month ) = 1
END DO
ELSE IF ( INDEX (targs (2), '-' ) > 0 ) THEN
CALL StringTokenize (string = targs (4), delims = '-', &
args = args, nargs = nargs)
j = StringToLong (args (1) )
k = StringToLong (args (2) )
DO i = j, k
cron % months ( i ) = 1
END DO
ELSE
month = StringToLong ( targs (4) )
cron % months ( month ) = 1
END IF
!search for days of week
cron % daysOfWeek = 0
IF ( targs (5) (1:1) == '*' ) THEN
cron % daysOfWeek = 1
ELSE IF ( INDEX (targs (5), ',' ) > 0 ) THEN
CALL StringTokenize (string = targs (5), delims = ',', &
args = args, nargs = nargs)
DO i = 1, nargs
dayOfWeek = StringToLong (args (i) )
cron % daysOfWeek ( dayOfWeek ) = 1
END DO
ELSE IF ( INDEX (targs (2), '-' ) > 0 ) THEN
CALL StringTokenize (string = targs (5), delims = '-', &
args = args, nargs = nargs)
j = StringToLong (args (1) )
k = StringToLong (args (2) )
DO i = j, k
cron % daysOfWeek ( i ) = 1
END DO
ELSE
dayOfWeek = StringToLong ( targs (5) )
cron % daysOfWeek ( dayOfWeek ) = 1
END IF
RETURN
END SUBROUTINE CronParseString